package org.jeecg.modules.miniAppCustomerEndPoint.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.modules.miniAppCustomerEndPoint.enums.JxOrderStateEnum;
import org.jeecg.modules.miniAppCustomerEndPoint.enums.JxPaymentMethodEnum;
import org.jeecgframework.poi.excel.annotation.Excel;

import java.util.Date;


@Data
@TableName("jx_order")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "jx_order对象", description = "订单表")
public class JxOrderDo {

    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "id")
    private String Id;

    /**
     * 当用户 保存取餐地址时，会自动为用户在 jx_user 表中创建一条记录，生成一个唯一的用户id;
     */
    @TableField(value = "user_id")
    private String userId;

    /**
     * 是那个站点的用户下的单，站点id，取消大厦，站点 ---> 取餐地址（大厦+楼层+门牌号）
     */
    @TableField(value = "site_id")
    private String siteId;

    /**
     * 支付方式，微信或支付宝支付； 当前仅提供微信小程序，若后期提供 PC网页下单入口或 手机App，则会引入其他支付方式，比如 支付宝，银联支付等
     */
    @Excel(name = "支付方式", width = 15)
    @ApiModelProperty(value = "支付方式")
    @TableField(value = "payment_method")
    private JxPaymentMethodEnum paymentMethod;

    /**
     * 支付ID，微信支付平台会生成一个唯一的支付id，prepay_id，小程序端根据 prepay_id来唤起手机微信端，输入支付密码页面
     */
    @Excel(name = "支付ID", width = 15)
    @ApiModelProperty(value = "支付ID")
    @TableField(value = "payment_id")
    private String paymentId;

    /**
     * 当用户支付后，微信支付平台通过 callback 推送支付成功结果中，包含的支付时间
     */
    @TableField(value = "pay_time")
    private Date payTime;

    /**
     * 用户的一个订单包含多项菜品，此字段为多项菜品的累计总金额，用户最终支付的金额，提出优惠券后的金额
     */
    @TableField(value = "total_price")
    private Integer totalPrice;

    /**
     * 每个订单可以使用多个优惠卷，记录下某个订单使用的优惠券的id列表，使用逗号分隔
     */
    @TableField(value = "coupon_ids")
    private String couponIds;

    /**
     * 该订单产生的积分，简单的积分规则会按照用户总消费金额换算积分；
     * 也可以设计较为复杂的积分发放规则，比如不同店铺的消费金额兑换积分比例不同等
     */
    @TableField(value = "integral")
    private Integer integral;

    /**
     * 若存在退款，申请退款，微信支付平台生成的退款交易id；退款场景：
     * 1. 用户支付后，取消订单，自动为客户退款
     * 2. 存在售后问题，按照售后标准，由工作人员为用户退款
     */
    @TableField(value = "refund_id")
    private String refundId;

    /**
     * 订单状态 0: 所有订单，1 待支付，2 待发货，3 待收货，4 待评价
     */
    @TableField("state")
    private JxOrderStateEnum state;

    /**
     * 付款信息
     */
    @Excel(name = "付款信息", width = 15)
    @ApiModelProperty(value = "付款信息")
    @TableField(value = "object_json")
    private String objectJson;

    /**
     * 订单口味评分
     */
    @TableField("flavor_score")
    private Float flavorScore;

    /**
     * 订单份量评分
     */
    @TableField("quantity_score")
    private Float quantityScore;

    /**
     * 订单配送评分
     */
    @TableField("delivery_score")
    private Float deliveryScore;

    /**
     * 评论内容，最多120个汉字
     */
    @TableField("review_msg")
    private String reviewMsg;



    /**
     * 每一天的订单，拥有相同的此标志，为数值形式的 yyyyMMdd ，比如 20230105；用来标记某一天的所有订单，便于查找某一天订单时，
     * 能够根据此字段创建的索引，快速查找到；此字段也业务功能意义较弱，主要是为了便于查询时，通过对该字段创建索引，提升查询性能
     */
    @TableField("date_flag")
    private Integer dateFlag;

    private Date createTime;

    private Date updateTime;
}
